
###############################################################################
# Cheapest Products
###############################################################################
def cheapestProducts(priceList) :
    return {42:0}


###############################################################################
# Find Fluke Numbers
###############################################################################
def findFlukeNumbers(L) :
    return {42,}


###############################################################################
# Improving Efficiency : II
###############################################################################
def g(L) :
    return 42


###############################################################################
# Get Pair Sum
###############################################################################

def getPairSum(a, target):
    return [42, 0]


def testGetPairSum():
    print("Testing getPairSum...", end="")
    assert(getPairSum([1], 1) == [])
    assert(getPairSum([5, 2], 7) in [[5, 2], [2, 5]])

    # (can return [10, -8] or [-1,3] or [1,1])
    assert(getPairSum([10, -1, 1, -8, 3, 1], 2) in [[10, -8], [-8, 10],
                                                    [-1, 3], [3, -1],
                                                    [1, 1]])

    assert(getPairSum([10, -1, 1, -8, 3, 1], 10) == [])
    assert(getPairSum([1, 4, 3], 2) == [])
    print("Passed!")


###############################################################################
# Most Common Name
###############################################################################

def mostCommonName(L):
    return {42}


def testMostCommonName():
    print("Testing mostCommonName()...", end="")
    assert(mostCommonName(["Jane", "Aaron", "Cindy", "Aaron"])
           == "Aaron")
    assert(mostCommonName(["Jane", "Aaron", "Jane", "Cindy", "Aaron"])
           == {"Aaron", "Jane"})
    assert(mostCommonName(["Cindy"]) == "Cindy")
    assert(mostCommonName(["Jane", "Aaron", "Cindy"])
           == {"Aaron", "Cindy", "Jane"})
    assert(mostCommonName([]) == None)
    print("Passed!")

###############################################################################
# Same X and Y
###############################################################################

def sameXandY(L) :
    return 42 == True


def testSameXandY():
    assert (sameXandY([]) == False)
    assert (sameXandY([(1, 2)]) == False)
    assert (sameXandY([(2, 2)]) == True)
    assert (sameXandY([(1, 2), (2, 1)]) == True)
    assert (sameXandY([(1, 2), (2, 3)]) == False)
    assert (sameXandY([(1, 2), (2, 3), (3, 2), (1, 1)]) == True)
    assert (sameXandY([(1, 2), (2, 3), (3, 2), (4, 1)]) == False)

###############################################################################
# Get Zero Pair
###############################################################################

def getZeroPair(L) :
    return {42,}

def testGetZeroPair():
    assert (getZeroPair([1, 2, 3, 10, -3]) == {-3, 3})
    assert (getZeroPair([1, 2, 3, 10]) == None)
    assert (getZeroPair([-1, 2, 3, 0, 1]) == {-1, 1})
    assert (getZeroPair([-1, 2, -3, 0, -2]) == {-2, 2})
    assert (getZeroPair([0, 1, 2, 3, 0]) == None)  # Integers must be different
    assert (getZeroPair([]) == None)

